﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Kaskelot.Services.Model;

namespace Stockholm.SOA.Kaskelot.WCF.ServiceImplementation.Mapping
{
	public static class ForsamlingExtensions
	{
		public static DataContracts.Forsamling ToContract(this Forsamling entity)
		{
			DataContracts.Forsamling b = new DataContracts.Forsamling();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static DataContracts.Forsamling ToMinimalContract(this Forsamling entity)
		{
			DataContracts.Forsamling b = new DataContracts.Forsamling();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static Forsamling ToEntity(this DataContracts.Forsamling b)
		{
			Forsamling entity = new Forsamling();

			CopyToEntity(b, entity);

			return entity;
		}

		public static void UpdateEntity(this Forsamling entity, DataContracts.Forsamling forsamling)
		{
			CopyToEntity(forsamling, entity);
		}

		private static void CopyFromEntity(Forsamling from, DataContracts.Forsamling to, bool minimal)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Namn = from.Benamning;
			to.ValkretsId = from.ValkretsId;
			
			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			to.ForsamlingNr = from.ForsamlingNr;

			if (minimal) return;

			to.Valkrets = from.Valkrets.ToMinimalContract();

			if (from.Valdistrikt != null)
			{
				to.Valdistrikt = new List<DataContracts.Valdistrikt>();
				foreach (Valdistrikt v in from.Valdistrikt)
				{
					to.Valdistrikt.Add(v.ToMinimalContract());
				}
			}
		}

		private static void CopyToEntity(DataContracts.Forsamling from, Forsamling to)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Benamning = from.Namn;

			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			to.ForsamlingNr = from.ForsamlingNr;

			to.ValkretsId = from.ValkretsId;
		}
	}
}
